#!/usr/bin/python3
# -*-coding:utf-8 -*

"""  Fichier regroupant les fonctions, classes de gestion global du jeu """

# IMPORT
from pygame.event import get
from pygame.key import get_pressed
from pygame.locals import QUIT,KEYDOWN,K_ESCAPE
from pygame.time import Clock
from pygame.locals import K_UP,K_DOWN,K_LEFT,K_RIGHT

from config import MOVEMENT,UP,DOWN,LEFT,RIGHT
from config import ORIGIN
from config import FPS
from maps import Map
from sprites import Player
from view import View


class Game(object):

    """ 
        Classe de gestion du jeu
        
        Paramètres:
        Map map - Objet représentant la carte du jeu
        Player player - Objet représentant le joueur
        
    """

    def __init__(self):
        """  Constructeur de la classe  """
        # Chargement du controleur de la fenetre du jeu
        self.view=View()
        # Chargement de la carte active
        self.map=Map('exemple_map')
        # Chargement du joueur
        self.player=Player('player',ORIGIN,self.map)
        # Chargement du controleur de la fenetre du jeu
        self.view.addElementGame(self.map,self.player)

    def play(self):
        """ Méthod de lancement du jeu """
        # Init de la fenetre
        self.view.init()
        # start the main loop
        clock=Clock()
        while True:
            clock.tick(FPS)
            for event in get():
                # Gestion du cas ou l'on appuie sur "echap" ou que l'on ferme la fenêtre
                if event.type==QUIT or (event.type==KEYDOWN and event.key==K_ESCAPE):
                    return

            # Récupération des actions de l'utilisateur
            direction=self.monitorUser()

            if direction and direction in MOVEMENT.keys():
                # Mise à jour du joueur
                self.player.update(direction)
                # Mise a jour de la fenetre
                self.view.update()

    def monitorUser(self):
        """
            Méthode de gestion des actions du joueur
            
            Retour:
            int - clé de la direction

        """
        # Variable
        keyPressed=get_pressed()
        direction=0
        # Affectation de la direction
        if keyPressed[K_UP]:
            direction+=UP
        if keyPressed[K_DOWN]:
            direction+=DOWN
        if keyPressed[K_RIGHT]:
            direction+=RIGHT
        if keyPressed[K_LEFT]:
            direction+=LEFT
        if direction!=0:
            return direction
        return None
